]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
texture-cache: Fix invalid reads when storing used resource scales
authorSebastian Keller <skeller@gnome.org>
Mon, 3 Feb 2020 00:06:14 +0000 (01:06 +0100)
committerFlorian Müllner <florian.muellner@gmail.com>
Thu, 6 Feb 2020 19:47:24 +0000 (19:47 +0000)
The used_scales hash table uses g_double_hash and g_double_equal which
try to read a double from the passed pointers. The pointers however were
pointing to a float, leading to an invalid read.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/974

src/st/st-texture-cache.c

index 01d193851eef2f651d295a377b3355b121b9983d..7f957bff7448568f59f9b3f7270a107c7033102a 100644 (file)
@@ -1443,8 +1443,9 @@ st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache,
 
       if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
         {
+          double resource_scale_double = resource_scale;
           g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), image);
-          g_hash_table_insert (cache->priv->used_scales, &resource_scale, &resource_scale);
+          g_hash_table_insert (cache->priv->used_scales, &resource_scale_double, &resource_scale_double);
         }
     }
 
@@ -1491,10 +1492,11 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache        *cache,
 
       if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
         {
+          double resource_scale_double = resource_scale;
           cairo_surface_reference (surface);
           g_hash_table_insert (cache->priv->keyed_surface_cache,
                                g_strdup (key), surface);
-          g_hash_table_insert (cache->priv->used_scales, &resource_scale, &resource_scale);
+          g_hash_table_insert (cache->priv->used_scales, &resource_scale_double, &resource_scale_double);
         }
     }
   else